# 7.11-2
# 局域网存活IP检测
# * 前置知识：subprocess、IP地址处理模块（ipaddress）
# * 输入内容：要检查的网段、子网掩码 (输入：192.168.0.0/24)
# * 输出示例： 192.168.0.1已被使用pythonping
# * 将输出结果放到文件
# * 将可能存在异常的地方需要做相应处理

# -*- coding: utf-8 -*-
import subprocess
import ipaddress

def check_ip(network):
    try:
        ip_network = ipaddress.ip_network(network, strict=False)
    except ValueError as e:
        print(f"输入的网段无效：{e}")
        return

    alive_ip = []
    for ip in ip_network.hosts():
        ip_str = str(ip)
        try:
            result = subprocess.run(['ping', '-c', '1', '-W', '1', ip_str], capture_output=True, text=True, timeout=2)
            if result.returncode == 0:
                alive_ip.append(ip_str)
                print(f"{ip_str} 已被使用")
        except subprocess.TimeoutExpired:
            print(f"{ip_str} TIMEOUT")

    if alive_ip:
        with open("检测结果.txt", "w", encoding="utf-8") as file:
            file.write("\n".join(alive_ip))
        print("结果已保存到 检测结果.txt 文件中")
    else:
        print("error")

network_cidr = input("请输入要检查的网段和子网掩码（例如：192.168.0.0/24）：")
check_ip(network_cidr)





